﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using 凯蒽斯.Dto;
using 凯蒽斯.Help;

namespace 凯蒽斯.page
{
    /// <summary>
    /// IOMonitoringControl1.xaml 的交互逻辑
    /// </summary>
    public partial class IOMonitoringControl1 : UserControl
    {
        private readonly DispatcherTimer _timer = new DispatcherTimer();

        public static List<ModbusSetting> modbusSettings;
        public static ModbusHelp modbusHelp;
        public IOMonitoringControl1()
        {
            InitializeComponent();
            _timer.Interval = TimeSpan.FromSeconds(1);
            // 绑定定时器触发事件（循环读取的核心）
            _timer.Tick += async (s, e) => await Timer_TickAsync();
            _timer.Start();
        }

        private async Task Timer_TickAsync()
        {
            // 1. 从valuePairs获取值
            MainWindow.valuePairs.TryGetValue("i状态", out object IValue);
            MainWindow.valuePairs.TryGetValue("o状态", out object OValue);

            // 2. 处理"I状态"：所有ListBoxItem与iBoolArray对应索引关联
            if (IValue is bool[] iBoolArray)
            {
                // 循环遍历IOX的所有项，索引一一对应（i：ListBoxItem索引 = bool数组索引）
                for (int i = 0; i < IOX.Items.Count && i < iBoolArray.Length; i++)
                {
                    // 安全转换为ListBoxItem
                    if (IOX.Items[i] is ListBoxItem listBoxItem)
                    {
                        bool currentBool = iBoolArray[i+2];
                        // 统一逻辑：根据bool值设置样式/状态（可按需修改）
                        listBoxItem.IsSelected = currentBool; // true=选中，false=未选中
                        listBoxItem.Foreground = currentBool ? Brushes.Red : SystemColors.ControlTextBrush; // 文字颜色
                        listBoxItem.Background = currentBool ? Brushes.Green : Brushes.Red; // 背景色
                                                                                                        // 可选：修改文本后缀（显示状态）
                        string originalText = listBoxItem.Content?.ToString() ?? "";
                        string statusText = currentBool ? "（已激活）" : "（未激活）";
                        // 避免重复添加后缀，先清理再添加
                        listBoxItem.Content = originalText.Contains("（") ? originalText.Split('（')[0] + statusText : originalText + statusText;
                    }
                }
            }
            else
            {
                MessageBox.Show("\"i状态\"的值不是bool[]数组类型");
            }

            // 3. 处理"O状态"：同理，可设置不同逻辑（如需与I状态区分）
            if (OValue is bool[] oBoolArray && oBoolArray.Length >= 3)
            {
                for (int i = 0; i < IOY.Items.Count && i < oBoolArray.Length; i++)
                {
                    if (IOY.Items[i] is ListBoxItem listBoxItem)
                    {
                        bool currentBool = oBoolArray[i+2];
                        // O状态专属逻辑（示例：边框颜色+工具提示）
                        listBoxItem.Background = currentBool ? Brushes.Green : Brushes.Red; // 背景色
                        listBoxItem.BorderBrush = currentBool ? Brushes.Green : Brushes.Transparent;
                        listBoxItem.BorderThickness = currentBool ? new Thickness(2) : new Thickness(0);
                        listBoxItem.ToolTip = currentBool ? "O状态：已输出" : "O状态：未输出";
                    }
                }
            }
            else
            {
                MessageBox.Show("\"o状态\"的值不是bool[]数组类型");
            }

        }
    }
}
